package codetop前三页.第一页;

/**总结：反转链表
 * 双指针法：一个存储已经交换的前半部分，一个辅助进行局部指针交换
 * @author ChenweiLin
 * @create 2022-01-04 11:14
 */
public class No1ReverseLinkedList {
    public static void main(String[] args) {

    }

    public ListNode reverseList(ListNode head) {
        //存储前半部分链表的辅助指针，因为不能有值，所以设置为null
        ListNode front = null;

        //局部反转链表的辅助指针
        ListNode temp  =  null;

        while (head != null){
            temp = head.next;//链表的剩余部分
            head.next = front;//局部反转
            front = head;//链表的前半最后指针部分位移
            head = temp;//head移动到上面村粗的链表的剩余部分 也就是从原链表来看往后走了一位
        }

        return front;

    }


    public class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }
}
